/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.penyusunananggaranpendapatansewabungadll;

import java.lang.Exception;
import java.util.List;
import java.util.Map;
import org.sadhar.errhandler.ClassAntiNull;
import org.sadhar.sia.common.ClassConnection;

/**
 *
 * @author hendro
 */
public class PenyusunanAnggaranPendapatanSewaBungaDAOImpl implements PenyusunanAnggaranPendapatanSewaBungaDAO {

    public double loadRealisasi(int idPosPendapatan, String kodeUnitKerja, String tahunAnggaran) throws Exception {
        String sql = "SELECT SUM(nominal) FROM ppmk.pendapatanLain WHERE idPosPendapatan=? AND " +
                "kodeUnitKerja=? AND YEAR(tglTerima)=?";
        double n = ClassAntiNull.AntiNullDouble((Double) ClassConnection.getJdbc().queryForObject(sql, new Object[]{
                    idPosPendapatan,
                    kodeUnitKerja,
                    tahunAnggaran}, Double.class));
        return n;
    }

    public Map select(int idPosAnggaranPendapatanUnit) throws Exception {
        String sql = "SELECT * FROM ppmk.anggaranPendapatanLain WHERE idPosAnggaranPendapatanUnit=?";
        try {
            Map map = ClassConnection.getJdbc().queryForMap(sql, new Object[]{
                        idPosAnggaranPendapatanUnit
                    });
            return map;
        } catch (Exception ex) {
            return null;
        }
    }

    public void delete(int idPosAnggaranPendapatanUnit) throws Exception {
        String sql = "DELETE FROM ppmk.anggaranPendapatanLain WHERE idPosAnggaranPendapatanUnit=?";
        ClassConnection.getJdbc().update(sql, new Object[]{
                    idPosAnggaranPendapatanUnit
                });
    }

    public void update(int idPosAnggaranPendapatanUnit, double prosentase, double realisasiSebelumnya) throws Exception {
        String sql = "UPDATE ppmk.anggaranPendapatanLain SET prosentase=?,realisasiTahunSebelumnya=? WHERE " +
                "idPosAnggaranPendapatanUnit=?";
        ClassConnection.getJdbc().update(sql, new Object[]{
                    prosentase,
                    realisasiSebelumnya,
                    idPosAnggaranPendapatanUnit
                });
    }

    public void insert(int idPosAnggaranPendapatanUnit, double prosentase, double realisasiSebelumnya) throws Exception {
        String sql = "INSERT INTO ppmk.anggaranPendapatanLain(idPosAnggaranPendapatanUnit,prosentase,realisasiTahunSebelumnya) values(?,?,?)";
        ClassConnection.getJdbc().update(sql, new Object[]{
                    idPosAnggaranPendapatanUnit,
                    prosentase,
                    realisasiSebelumnya});
    }

    public List<Map> listAnggaranPendapatan(String tahunAnggaran) throws Exception {
        String sql = "SELECT posPendapatan.posPendapatan,unkerja.Nama_unit_kerja,anggaranPendapatanLain.realisasiTahunSebelumnya,anggaranPendapatanLain.prosentase," +
                "posAnggaranPendapatanUnit.idPosAnggaranPendapatanUnit," +
                "(anggaranPendapatanLain.realisasiTahunSebelumnya*(anggaranPendapatanLain.prosentase)/100)as jumlahAnggaran " +
                "FROM ((ppmk.posAnggaranPendapatanUnit posAnggaranPendapatanUnit " +
                "INNER JOIN ppmk.anggaranPendapatanLain anggaranPendapatanLain " +
                "ON (posAnggaranPendapatanUnit.idPosAnggaranPendapatanUnit = anggaranPendapatanLain.idPosAnggaranPendapatanUnit)) " +
                "INNER JOIN ppmk.posPendapatan posPendapatan ON (posPendapatan.idPosPendapatan = posAnggaranPendapatanUnit.idPosPendapatan)) " +
                "INNER JOIN kamus.unkerja unkerja ON (unkerja.Kd_unit_kerja = posAnggaranPendapatanUnit.kodeUnitKerja) " +
                "WHERE (posAnggaranPendapatanUnit.tahunAnggaran = ?) " +
                "AND (posPendapatan.namaTabelAnggaran = 'anggaranPendapatanLain')";
        List<Map> map = ClassConnection.getJdbc().queryForList(sql, new Object[]{
                    tahunAnggaran
                });
        return map;
    }

    public double getAnggaran(String dbName, String tblName, String tahunAnggaran,String kodeTagih) throws Exception {
        String sql ="SELECT  SUM("+tblName+".nominal) as anggaran FROM "+dbName+"."+tblName+" WHERE (YEAR("+tblName+".tgl_bayar)=?)" +
                        " AND ("+tblName+".kd_tagih =?)";
        try{
            Map m = ClassConnection.getJdbc().queryForMap(sql, new Object[]{
                String.valueOf(Integer.valueOf(tahunAnggaran)-1),
                kodeTagih
            });
            double x = Double.valueOf(m.get("anggaran").toString());
            return x;
        }catch(Exception ex){
            return 0;
        }
    }
}
